package LC;

/**
 * https://leetcode.com/problems/valid-palindrome/description/
 * Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
 * For example,
 * "A man, a plan, a canal: Panama" is a palindrome.
 * "race a car" is not a palindrome.
 * Note:
 * Have you consider that the string might be empty? This is a good question to ask during an interview.
 * For the purpose of this problem, we define empty string as valid palindrome.
 */
public class LC_125_ValidPalindrome_TwoPointers {
    public static void main(String[] args) {
        boolean f = Solution.isPalindrome("A man, a plan, a canal: Panama");
        System.out.println(f);
    }

    static class Solution {
        static boolean isPalindrome(String s) {
            int i = 0, j = s.length() - 1;
            char head, tail;
            if (j < 0)
                return true;
            while (i < j) {
                head = s.charAt(i);
                tail = s.charAt(j);
                if (!Character.isLetterOrDigit(head)) i++;
                if (!Character.isLetterOrDigit(tail)) j--;
                if (Character.isLetterOrDigit(head) && Character.isLetterOrDigit(tail)) {
                    if (Character.toLowerCase(head) != Character.toLowerCase(tail)) return false;
                    i++;
                    j--;
                }
            }
            return true;
        }
    }
}
